/**
 * 系统设置类型定义
 */


// 设置标签页类型
export enum SettingTabType {
  MODEL = 'model',
  GENERAL = 'general',
  ADVANCED = 'advanced'
}

// API连接测试状态
export enum ConnectionTestStatus {
  IDLE = 'idle',
  TESTING = 'testing',
  SUCCESS = 'success',
  FAILED = 'failed'
}

// 连接测试结果
export interface ConnectionTestResult {
  success: boolean;
  error?: string;
}

// 保存设置状态
export enum SaveSettingsStatus {
  IDLE = 'idle',
  SAVING = 'saving',
  SUCCESS = 'success',
  FAILED = 'failed'
}

// 模型设置接口
export interface ModelSettings {
  apiUrl: string;
  apiKey: string;
  model:string;
}

// 通用设置接口（预留）
export interface GeneralSettings {
  // 预留通用设置字段
  language?: string;
  theme?: string;
}

// 高级设置接口（预留）
export interface AdvancedSettings {
  // 预留高级设置字段
  maxTokens?: number;
  temperature?: number;
}

// 系统设置接口
export interface SystemSettings {
  model: ModelSettings;
  general: GeneralSettings;
  advanced: AdvancedSettings;
}

// 模型选项列表 - 已移除，仅使用自定义模型

// 设置上下文状态
export interface SettingContextState {
  // 当前设置
  settings: SystemSettings;
  // 原始设置（上次保存的）
  originalSettings: SystemSettings;
  // 是否有未保存的更改
  hasUnsavedChanges: boolean;
  // 当前活动的标签页
  activeTab: SettingTabType;
  // 是否显示设置弹窗
  isOpen: boolean;
  // API密钥是否显示明文
  showApiKey: boolean;
  // API连接测试状态
  connectionTestStatus: ConnectionTestStatus;
  connectionTestError?: string;
  // 保存设置状态
  saveStatus: SaveSettingsStatus;
}

// 设置上下文接口
export interface SettingContextType {
  state: SettingContextState;
  // 打开设置弹窗
  openSettings: () => void;
  // 关闭设置弹窗
  closeSettings: () => void;
  // 切换标签页
  setActiveTab: (tab: SettingTabType) => void;
  // 更新模型设置
  updateModelSettings: (settings: Partial<ModelSettings>) => void;
  // 更新通用设置
  updateGeneralSettings: (settings: Partial<GeneralSettings>) => void;
  // 更新高级设置
  updateAdvancedSettings: (settings: Partial<AdvancedSettings>) => void;
  // 切换API密钥显示状态
  toggleApiKeyVisibility: () => void;
  // 测试API连接
  testConnection: () => Promise<boolean>;
  // 保存设置
  saveSettings: () => Promise<boolean>;
  // 重置设置到上次保存的状态
  resetSettings: () => void;
}
